package org.gdkm.el;

import java.io.File;
import java.util.ArrayList;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 主服务类. </br> 用于减低的程序的耦合性. </br> 先读取服务器配置文件,再开始初始化.</br> 日期: 2012-10-13
 * <p>
 * 
 * @author Arylo<<b>arylo.open@gmail.com</b>>
 * @version 1.0
 */
public class MainServer {
	// 配置文件位置
	public static final String xmlFilePath = "res/conf.xml";
	private static int accessPort = 30001;
	private static String serverLogPath = null;
	private static String clientLogPath = null;
	private static String dataBasePath = null;
	private static String filePath = null;
	private static ArrayList<String> filePathList = null;

	/**
	 * 程序默认主入口.
	 */
	public static void main(String[] args) {
		filePathList = new ArrayList<String>();
		readConfig();
		new MainServer();
	}

	/**
	 * 构建一个MainServer对象.
	 */
	public MainServer() {
		new LogServer();
		new AccessServer();
		new FileServer();
		new DataBaseServer();
	}

	/**
	 * 返回接受层开放的端口.
	 */
	public static int getAccessPort() {
		return accessPort;
	}

	/**
	 * 返回服务端日志的使用位置.
	 */
	public static String getServerLogPath() {
		return serverLogPath;
	}

	/**
	 * 返回客户端日志的使用位置.
	 */
	public static String getClientLogPath() {
		return clientLogPath;
	}

	/**
	 * 返回数据服务的使用位置.
	 */
	public static String getDataBasePath() {
		return dataBasePath;
	}

	/**
	 * 返回文件服务的使用位置.
	 */
	public static String getFilePath() {
		return filePath;
	}

	/**
	 * 返回文件服务的监控位置.
	 */
	public static ArrayList<String> getFilePathList() {
		return filePathList;
	}

	private static void readConfig() {
		SAXReader reader = new SAXReader();
		try {
			Document doc = reader.read(new File(xmlFilePath));
			Element root = doc.getRootElement();
			for (int i = 0, len = root.elements().size(); i < len; i++) {
				Element _elt = (Element) root.elements().get(i);
				if (_elt.getName().equals("Server") == true) {
					if (_elt.attributeCount() != 0) {
						String _name = ((Attribute) _elt.attributes().get(0)).getText();
						//接入服务
						if (_name.equals("Access")) {
							for (Object _o : _elt.elements()) {
								if (((Element) _o).getName().equals("Port") == true) {
									accessPort = Integer
											.parseInt(((Element) _o).getText());
								}
							}
						}
						//文件服务
						if (_name.equals("File")) {
							for (Object _o : _elt.elements()) {
								if (((Element) _o).getName().equals("Path") == true) {
									filePathList.add(((Element) _o).getText());
								}
								if (((Element) _o).getName().equals("Root") == true) {
									filePath = ((Element) _o).getText();
								}
							}
						}
						//数据服务
						if (_name.equals("DataBase")) {
							if (_elt.element("Type").getText().equals("XML")) {
								dataBasePath = _elt.element("Path").getText();
							}
						}
						//日志服务
						if (_name.equals("Log")) {
							for (Object _o : _elt.elements()) {
								if (((Element) _o).getName().equals("SPath") == true) {
									serverLogPath = ((Element) _o).getText();
								}
								if (((Element) _o).getName().equals("CPath") == true) {
									clientLogPath = ((Element) _o).getText();
								}
							}
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
